package com.yeban.javase.day11.bookmanagesystem;

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

/**
 * @Desc TODO
 * @Author yeban
 * @Date 2025/10/20
 *
 * 1.定义Book类
 * 2.完成主界面和选择
 * 3.完成查询所有图书
 * 4.完成添加图书
 * 5.完成删除图书
 * 6.完成修改图书
 * 7.使用Debug追踪调试
 */
public class BookManagerSystem {
    // 使用Map存储图书，key为书名，value为Book对象
    private static Map<String, Book> bookMap = new HashMap<>();
    private static Scanner sc = new Scanner(System.in);

    public static void main(String[] args) {
        // 初始化一些图书数据
        initBooks();

        while (true) {
            // 显示主界面
            System.out.println("--------欢迎来到图书管理系统--------");
            System.out.println("1. 查看所有书籍");
            System.out.println("2. 添加书");
            System.out.println("3. 删除书");
            System.out.println("4. 修改书");
            System.out.println("5. 退出");
            System.out.println("请输入你的选择：");

            int num = sc.nextInt();
            sc.nextLine(); // 消耗换行符

            switch (num) {
                case 1:
                    // 查看所有书籍
                    queryAllBooks();
                    break;
                case 2:
                    // 添加书籍
                    addBook();
                    break;
                case 3:
                    // 删除书
                    deleteBook();
                    break;
                case 4:
                    // 修改书
                    updateBook();
                    break;
                case 5:
                    // 退出
                    System.out.println("退出");
                    System.out.println("谢谢你的使用");
                    System.exit(0);
                    break;
                default:
                    System.out.println("输入错误，请重新输入");
                    break;
            }
        }
    }

    /**
     * 初始化图书数据
     */
    private static void initBooks() {
        bookMap.put("西游记", new Book("名著", "西游记", 19.0));
        bookMap.put("水浒传", new Book("名著", "水浒传", 29.0));
        bookMap.put("Java入门到精通", new Book("IT书籍", "Java入门到精通", 99.0));
        bookMap.put("PHP入门到精通", new Book("IT书籍", "PHP入门到精通", 9.9));
    }

    /**
     * 1. 查询所有图书
     */
    private static void queryAllBooks() {
        System.out.println("--------查看书籍--------");

        if (bookMap.isEmpty()) {
            System.out.println("暂无图书信息");
            return;
        }

        System.out.println("类型\t\t书名\t\t\t价格");
        for (Map.Entry<String, Book> entry : bookMap.entrySet()) {
            Book book = entry.getValue();
            System.out.println(book.getType() + "\t\t" + book.getName() + "\t\t" + book.getPrice());
        }
    }

    /**
     * 2. 添加图书
     */
    private static void addBook() {
        System.out.println("--------添加书籍--------");

        System.out.println("请输入要添加书籍的类型：");
        String type = sc.nextLine();

        System.out.println("请输入要添加的书名：");
        String name = sc.nextLine();

        // 检查书籍是否已存在
        if (bookMap.containsKey(name)) {
            System.out.println("该书籍已存在，无法添加");
            return;
        }

        System.out.println("请输入要添加书的价格：");
        double price = sc.nextDouble();
        sc.nextLine(); // 消耗换行符

        // 创建Book对象并添加到Map中
        Book book = new Book(type, name, price);
        bookMap.put(name, book);

        System.out.println("添加" + type + "演义成功");
    }

    /**
     * 3. 删除图书
     */
    private static void deleteBook() {
        System.out.println("--------删除书籍--------");

        System.out.println("请输入要删除书籍的类型：");
        String type = sc.nextLine();

        System.out.println("请输入要删除的书名：");
        String name = sc.nextLine();

        // 检查书籍是否存在
        if (!bookMap.containsKey(name)) {
            System.out.println("该书籍不存在");
            return;
        }

        // 删除书籍
        bookMap.remove(name);
        System.out.println("删除" + type + name + "书籍成功");
    }

    /**
     * 4. 修改图书
     */
    private static void updateBook() {
        System.out.println("--------修改书籍--------");

        System.out.println("请输入要修改书籍的类型：");
        String oldType = sc.nextLine();

        System.out.println("请输入要修改的书名：");
        String oldName = sc.nextLine();

        // 检查书籍是否存在
        if (!bookMap.containsKey(oldName)) {
            System.out.println("该书籍不存在");
            return;
        }

        System.out.println("请输入新的书名：");
        String newName = sc.nextLine();

        System.out.println("请输入新的价格：");
        double newPrice = sc.nextDouble();
        sc.nextLine(); // 消耗换行符

        // 如果书名改变了，需要删除旧的key，添加新的key
        if (!oldName.equals(newName)) {
            bookMap.remove(oldName);
        }

        // 更新书籍信息
        Book book = new Book(oldType, newName, newPrice);
        bookMap.put(newName, book);

        System.out.println("修改成功");
    }
}
